class Questoes::Pergunta < ActiveRecord::Base
  
  belongs_to :assunto, :class_name => 'Questoes::Assunto'
  
  validates_presence_of :enunciado
  validates_presence_of :dificuldade
  validates_presence_of :alternativaCorreta
  validates_presence_of :alternativaErrada1
  validates_presence_of :alternativaErrada2
  validates_presence_of :alternativaErrada3
  validates_presence_of :alternativaErrada4
  validates_presence_of :vezesRespondidaAltCorreta
  validates_presence_of :vezesRespondidaAltErrada1
  validates_presence_of :vezesRespondidaAltErrada2
  validates_presence_of :vezesRespondidaAltErrada3
  validates_presence_of :vezesRespondidaAltErrada4
  validates_numericality_of :dificuldade, :if => :dificuldade
  #validate :pontuacaoDoEnunciado
  
  # Constantes
  DIFICULDADES = {1 => "Fácil", 2 => "Médio", 3 => "Difícil"}
  
  # Metodos de validações

#  def pontuacaoDoEnunciado
#    if not self.enunciado.empty? and not self.enunciado.include?("?")
#      errors.add(:enunciado, "O Enunciado deve conter '?'.")
#    else
#      return true
#    end
#  end
  
  # Metodos de classe

  def self.buscarPerguntas(*parametros)
    Questoes::Pergunta.find(*parametros)
  end
  
  def self.obterContagem
    Questoes::Pergunta.count
  end
  
  # Metodos de objetos
  
  def validarDados
    self.valid?
  end
  
  def criar(assunto)
    pergunta_assunto = Questoes::Assunto.obterAssunto(assunto)
    self.assunto_id = pergunta_assunto.id
    self.save
  end
  
  def atualizar(parametros, assunto)
    pergunta_assunto = Questoes::Assunto.obterAssunto(assunto)
    self.attributes = parametros
    self.assunto_id = pergunta_assunto.id
    self.save
  end
  
  def remover
    self.delete
  end
  
  def verificarAlternativa(alternativa)
     case alternativa
      when self.alternativaCorreta
        resposta = true
        self.vezesRespondidaAltCorreta += 1
      when self.alternativaErrada1
        resposta = false     
        self.vezesRespondidaAltErrada1 += 1
      when self.alternativaErrada2
        resposta = false           
        self.vezesRespondidaAltErrada2 += 1
      when self.alternativaErrada3
        resposta = false           
        self.vezesRespondidaAltErrada3 += 1
      when self.alternativaErrada4
        resposta = false           
        self.vezesRespondidaAltErrada4 += 1  
      end
     
        self.save
        
        return resposta
   end
   
   def calcularFrequencias(alternativas)

     total = self.vezesRespondidaAltCorreta +
              self.vezesRespondidaAltErrada1 +
              self.vezesRespondidaAltErrada2 +
              self.vezesRespondidaAltErrada3 +
              self.vezesRespondidaAltErrada4
     frequencias = []
     if total == 0
       frequencias = [20.0, 20.0, 20.0, 20.0, 20.0]
     else
      for i in alternativas do
         case i
          when self.alternativaCorreta
            frequencias.push((self.vezesRespondidaAltCorreta * 100.0) / total)  
          when self.alternativaErrada1
            frequencias.push((self.vezesRespondidaAltErrada1 * 100.0) / total)
          when self.alternativaErrada2
            frequencias.push((self.vezesRespondidaAltErrada2 * 100.0) / total)
          when self.alternativaErrada3
            frequencias.push((self.vezesRespondidaAltErrada3 * 100.0) / total)
          when self.alternativaErrada4
            frequencias.push((self.vezesRespondidaAltErrada4 * 100.0) / total)
          end
       end
     end
     
     return frequencias
 end
 
 def eliminar(alternativas)
   random = rand()
   random = Integer(random * 10) % 5
   contador = 0
   
   while contador < random
     eliminar = rand()
     eliminar = Integer(eliminar*10) % 5
     if alternativas[eliminar] != nil and alternativas[eliminar] != self.alternativaCorreta
      alternativas[eliminar] = nil
      contador += 1
     end
   end
   alternativas.push(random)
   return alternativas
 end
end
